#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <unistd.h>

#include "../include/logger.h"

// 打开日志文件
FILE *logFile;

// 初始化日志模块
void initLog(const char *filename) {
    logFile = fopen(filename, "a");
    if (logFile == NULL) {
        perror("无法打开日志文件");
        exit(1);
    }

    // 重定向标准输出和标准错误到日志文件
    dup2(fileno(logFile), STDOUT_FILENO);
    dup2(fileno(logFile), STDERR_FILENO);
}

// 写入日志消息
void writeLog(LogLevel level, const char *file, const char *function, const char *format, ...) {
    // 获取当前时间
    time_t rawTime;
    struct tm *timeInfo;
    char timestamp[20];
    time(&rawTime);
    timeInfo = localtime(&rawTime);
    strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", timeInfo);

    // 根据日志级别选择日志前缀
    const char *prefix;
    switch (level) {
        case INFO:
            prefix = "[INFO]";
            break;
        case WARNING:
            prefix = "[WARNING]";
            break;
        case ERROR:
            prefix = "[ERROR]";
            break;
        default:
            prefix = "[UNKNOWN]";
            break;
    }

    // 格式化日志消息
    va_list args;
    va_start(args, format);

    fprintf(logFile, "%s %s [%s:%s]: ", timestamp, prefix, file, function);
    vfprintf(logFile, format, args);
    fprintf(logFile, "\n");

    va_end(args);

    // 刷新缓冲区，确保日志消息被写入文件
    fflush(logFile);
}


// 关闭日志模块
void closeLog() {
    if (logFile != NULL) {
        fclose(logFile);
    }
}


#if 0
int main() {
      // 初始化日志模块
    initLog("app.log");

    // 写入日志消息
    writeLog(INFO,__FILE__,__func__,"这是一条信息日志");
    //writeLog(WARNING, "这是一条警告日志");
    //writeLog(ERROR, "这是一条错误日志");
    hello();
    // 关闭日志模块
    closeLog();

    return 0;
}

#endif
